﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using ProgramaPuentePudahuel.App.BO;
using System.Data.Common;
using System.Data.SqlClient;
using ProgramaPuentePudahuel.App.DAL.FuncionarioDBTableAdapters;

namespace ProgramaPuentePudahuel.App.DAL
{
    public class FuncionarioBD
    {
        public static FuncionarioList GetLista()
        {
            FUNCIONARIOTableAdapter TAdapterFunc = new FUNCIONARIOTableAdapter();
            DataTable tabla = new DataTable();
            FuncionarioList listaFuncionarios = new FuncionarioList();

            //se buscan todos los funcionarios con getData() y se asignan a la tabla
            tabla = TAdapterFunc.GetData();

            int numeroFuncionarios = tabla.Rows.Count;

            for (int i = 0; i < numeroFuncionarios; i++)
            {
                Funcionario temp = new Funcionario();

                temp.RutFuncionario = tabla.Rows[i][0].ToString();
                temp.NombresFuncionario = tabla.Rows[i][1].ToString();
                temp.ApellidoFuncionario = tabla.Rows[i][2].ToString();
                DateTime nac = DateTime.Parse(tabla.Rows[i][3].ToString());
                temp.FechaNacFuncionario = nac.Day.ToString() + "-" + nac.Month.ToString() + "-" + nac.Year.ToString();
                DateTime ing = DateTime.Parse(tabla.Rows[i][4].ToString());
                temp.FechaIngresoFuncionario = ing.Day.ToString() + "-" + ing.Month.ToString() + "-" + ing.Year.ToString();
                temp.CargoFuncionario = tabla.Rows[i][5].ToString();

                listaFuncionarios.Add(temp);
            }
            //string a = tabla.Rows[0][1].ToString();
            return listaFuncionarios;
            
        }

        public static int Actualizar(Funcionario myFuncionario)
        {
            FUNCIONARIOTableAdapter TAdapterFunc1 = new FUNCIONARIOTableAdapter();
            TAdapterFunc1.ActualizarFuncionario(myFuncionario.RutFuncionario, 
                myFuncionario.NombresFuncionario, myFuncionario.ApellidoFuncionario, 
                DateTime.Parse(myFuncionario.FechaNacFuncionario.ToString()), DateTime.Parse(myFuncionario.FechaIngresoFuncionario.ToString()), myFuncionario.CargoFuncionario,myFuncionario.RutFuncionario);
            int retorno = 1;
            return retorno;
        }

        public static int Insertar(Funcionario myFuncionario)
        {
            FUNCIONARIOTableAdapter TAdapterFunc1 = new FUNCIONARIOTableAdapter();
            TAdapterFunc1.InsertarFuncionario(myFuncionario.RutFuncionario,
                myFuncionario.NombresFuncionario, myFuncionario.ApellidoFuncionario,
                DateTime.Parse(myFuncionario.FechaNacFuncionario.ToString()), DateTime.Parse(myFuncionario.FechaIngresoFuncionario.ToString()), myFuncionario.CargoFuncionario);
            int retorno = 1;
            return retorno;
        }

        public static int Eliminar(Funcionario myFuncionario)
        {
            FUNCIONARIOTableAdapter TAdapterFunc1 = new FUNCIONARIOTableAdapter();
            TAdapterFunc1.EliminarFuncionario(myFuncionario.RutFuncionario);
            int retorno = 1;
            return retorno;
        }

        public static FuncionarioList BuscarFuncionario(string rut)
        {
            FUNCIONARIOTableAdapter TAdapterFunc = new FUNCIONARIOTableAdapter();
            DataTable tabla = new DataTable();
            FuncionarioList listaFuncionarios = new FuncionarioList();

            //se buscan todos los funcionarios con getData() y se asignan a la tabla
            tabla = TAdapterFunc.GetDataFuncionario1(rut);

            int numeroFuncionarios = tabla.Rows.Count;

            for (int i = 0; i < numeroFuncionarios; i++)
            {
                Funcionario temp = new Funcionario();

                temp.RutFuncionario = tabla.Rows[i][0].ToString();
                temp.NombresFuncionario = tabla.Rows[i][1].ToString();
                temp.ApellidoFuncionario = tabla.Rows[i][2].ToString();
                DateTime nac = DateTime.Parse(tabla.Rows[i][3].ToString());
                temp.FechaNacFuncionario = nac.Day.ToString() + "-" + nac.Month.ToString() + "-" + nac.Year.ToString();
                DateTime ing = DateTime.Parse(tabla.Rows[i][4].ToString());
                temp.FechaIngresoFuncionario = ing.Day.ToString() + "-" + ing.Month.ToString() + "-" + ing.Year.ToString();
                temp.CargoFuncionario = tabla.Rows[i][5].ToString();

                listaFuncionarios.Add(temp);
            }
            //string a = tabla.Rows[0][1].ToString();
            return listaFuncionarios;
        }
        public static Funcionario Login(String user,String pass)
        {
            Funcionario myFuncionario = null;

            using (SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionString))
            {
                SqlCommand myCommand = new SqlCommand("strprcLogin", myConnection);
                myCommand.CommandType = CommandType.StoredProcedure;
                myCommand.Parameters.AddWithValue("@user", user);
                myCommand.Parameters.AddWithValue("@pass", pass);

                myConnection.Open();
                using (SqlDataReader myReader = myCommand.ExecuteReader())
                {
                    if (myReader.Read())
                    {
                        myFuncionario = FillDataRecord(myReader);
                    }
                    myReader.Close();
                }
                myConnection.Close();
            }
            return myFuncionario;
        }

        #region Metodos privados
        private static Funcionario FillDataRecord(IDataRecord myDataRecord)
        {
            Funcionario myFuncionario = new Funcionario();
            myFuncionario.RutFuncionario = myDataRecord.GetString(myDataRecord.GetOrdinal("RUT_FUNCIONARIO"));
            myFuncionario.Permiso = myDataRecord.GetString(myDataRecord.GetOrdinal("PERMISO_FUNCIONARIO"));
            



            return myFuncionario;
        }

        #endregion




    }
}
